home *** CD-ROM | disk | FTP | other *** search
/ Archive Magazine CD 1995 / Archive Magazine CD 1995.iso / discs / utilities / utility_01 / modules / NewModes / VIDC_PCSrc < prev    next >
Encoding:
Text File  |  1992-02-05  |  10.4 KB  |  435 lines

  1. REM > EnhVIDCSrc
  2. REM
  3. REM Modified modes for NEC 3D
  4. REM
  5. REM (c) 1990 Andy Ling
  6. REM
  7. REM Address  : 29 Manor Road
  8. REM            Burgess Hill
  9. REM            West Sussex
  10. REM            RH15 ONW
  11.  
  12. PROCInitialise
  13.  
  14. DIM code% code_size, L% -1  : REM   This sets L% to limit of assembly
  15.  
  16. PROCAssemble
  17.  
  18. IF save AND (optlo AND %100) OSCLI "SAVE ModesPC+ "+STR$~code%+"+"+STR$~P%: OSCLI "SETTYPE ModesPC+ FFA"
  19.  
  20. END
  21.  
  22. DEFPROCInitialise
  23. CLS
  24. save = TRUE :optlo = %1100 : opthi = %1110
  25.  
  26. code_size   = 4500   : REM Amount reserved for assembling code
  27.  
  28. REM #####  Set up register names
  29. link    = 14        : REM Link register for subroutine calls
  30. sp      = 13        : REM Stack pointer
  31. ENDPROC
  32.  
  33. DEFPROCAssemble
  34. FOR pass = optlo TO opthi STEP (opthi - optlo)
  35. IF optlo AND %100   P%=0:O%=code% ELSE P%=code%:O%=0
  36.   [
  37.     OPT     pass
  38.  
  39. ;#####
  40. ;#   relocatable module header
  41. ;#####
  42.     EQUD    0                           ; Startcode
  43.     EQUD    0                           ; Initialisation code
  44.     EQUD    0                           ; Finalisation code
  45.     EQUD    service                     ; Service requests
  46.     EQUD    title                       ; Title string offset
  47.     EQUD    help                        ; Help string offset
  48.     EQUD    0                           ; Command table offset
  49.  
  50. ;#####
  51. ;#   Help and title strings
  52. ;#####
  53. .title
  54.     EQUS    "ModesPC+"
  55.     EQUB    0
  56.     ALIGN
  57. .help
  58.     EQUS    "Modified PC Modes for NEC 3D with VIDC Enhancer"+CHR$9+"1.00 ("+MID$(TIME$,5,11)+")"
  59.     EQUS    " (c) A. D. Ling"
  60.     EQUB    0
  61.     ALIGN
  62.  
  63.  
  64. ;#####
  65. ;#   Finalisation code - Don't die if it's fatal
  66. ;#####
  67. .finalise
  68.     CMP     R10     ,# 1            ; check for fatal finalisation
  69.     MOVNE   PC      ,link           ; return if not fatal
  70.     ADR     R0      ,error
  71.     ORRS    PC      ,link , #1<<28  ; set overflow flag
  72. .error
  73.     EQUD    &900
  74.     EQUS    "VIDC module refuses to die"
  75.     EQUB    0
  76.     ALIGN
  77.  
  78.  
  79. ;#####
  80. ;#   Services OS_Module - Traps mode changes
  81. ;#####
  82. .service
  83.     CMP     R1      ,# &46          ; Mode change
  84.     CMP     R1      ,# &50          ; Service mode extension
  85.     MOVNE   PC      ,link           ; Return if not mode change
  86.     CMN     R3      ,#1             ; test for monitor type
  87.     CMPNE   R3      ,#1
  88.     MOVNE   PC      ,link           ; return if not multisync
  89.     STMFD   (sp)!   ,{R5-R8,link}
  90.     ADR     R5      ,table
  91.     MOV     R8      ,#(table_end - table) >> 2
  92.     MOV     R6      ,# 0
  93. .loop
  94.     LDR     R7      ,[R5,R6,LSL #2]
  95.     CMP     R2      ,R7
  96.     BEQ     found
  97.     ADD     R6      ,R6,#3
  98.     CMP     R6      ,R8
  99.     BLT     loop
  100.     LDMFD   (sp)!   ,{R5-R8,PC}
  101. .found
  102.     MOV     R1      ,# 0            ; claim mode change
  103.     ADR     R7      ,m0work_list
  104.     ADD     R6      ,R6,# 1
  105.     LDR     R3      ,[R5,R6,LSL #2]
  106.     ADD     R3      ,R3,R7
  107.     ADD     R6      ,R6,# 1
  108.     LDR     R4      ,[R5,R6,LSL #2]
  109.     ADD     R4      ,R4,R7
  110.     LDMFD   (sp)!   ,{R5-R8,PC}
  111.  
  112.  
  113.     ALIGN
  114.  
  115. .table
  116.     EQUD    41
  117.     EQUD    m41vidc_list - m0work_list
  118.     EQUD    m41work_list - m0work_list
  119.  
  120.     EQUD    42
  121.     EQUD    m42vidc_list - m0work_list
  122.     EQUD    m42work_list - m0work_list
  123.  
  124.     EQUD    43
  125.     EQUD    m43vidc_list - m0work_list
  126.     EQUD    m43work_list - m0work_list
  127.  
  128.     EQUD    44
  129.     EQUD    m44vidc_list - m0work_list
  130.     EQUD    m44work_list - m0work_list
  131.  
  132.     EQUD    45
  133.     EQUD    m45vidc_list - m0work_list
  134.     EQUD    m45work_list - m0work_list
  135.  
  136.     EQUD    46
  137.     EQUD    m46vidc_list - m0work_list
  138.     EQUD    m46work_list - m0work_list
  139.  
  140. .table_end
  141.  
  142.  
  143. .m0work_list
  144.  
  145. .m41vidc_list
  146.     EQUD    0
  147.     EQUD    25                      ; Base MODE
  148.     EQUD    &805F0000
  149.     EQUD    &840B0000
  150.     EQUD    &880E8000
  151.     EQUD    &8C0C4000
  152.     EQUD    &905C4000
  153.     EQUD    &945E8000
  154.     EQUD    &A0704000
  155.     EQUD    &A4004000
  156.     EQUD    &A80D8000
  157.     EQUD    &AC0E0000
  158.     EQUD    &B0658000
  159.     EQUD    &B4660000
  160.     EQUD    &E0000003
  161.     EQUD    -1
  162.  
  163. .m41work_list
  164.     EQUD    0
  165.     EQUD    25                      ; Base MODE
  166.     EQUD    0
  167.     EQUD    0
  168.     EQUD    1
  169.     EQUD    79                      ; No. columns - 1
  170.     EQUD    2
  171.     EQUD    42                      ; No. rows - 1
  172.     EQUD    4
  173.     EQUD    1                       ; X Eigen
  174.     EQUD    5
  175.     EQUD    1                       ; Y Eigen
  176.     EQUD    6
  177.     EQUD    80                      ; width in bytes
  178.     EQUD    7
  179.     EQUD    &6D60                   ; memory size (110K)
  180.     EQUD    11
  181.     EQUD    639                     ; X pixels - 1
  182.     EQUD    12
  183.     EQUD    349                     ; Y pixels - 1
  184.     EQUD    -1
  185.  
  186. .m42vidc_list
  187.     EQUD    0
  188.     EQUD    26                      ; Base MODE
  189.     EQUD    &805F0000
  190.     EQUD    &840B0000
  191.     EQUD    &880E8000
  192.     EQUD    &8C0D4000
  193.     EQUD    &905D4000
  194.     EQUD    &945E8000
  195.     EQUD    &A0704000
  196.     EQUD    &A4004000
  197.     EQUD    &A80D8000
  198.     EQUD    &AC0E0000
  199.     EQUD    &B0658000
  200.     EQUD    &B4660000
  201.     EQUD    &E0000007
  202.     EQUD    -1
  203.  
  204. .m42work_list
  205.     EQUD    0
  206.     EQUD    26                      ; Base MODE
  207.     EQUD    0
  208.     EQUD    0
  209.     EQUD    1
  210.     EQUD    79                      ; No. columns - 1
  211.     EQUD    2
  212.     EQUD    42                      ; No. rows - 1
  213.     EQUD    4
  214.     EQUD    1                       ; X Eigen
  215.     EQUD    5
  216.     EQUD    1                       ; Y Eigen
  217.     EQUD    6
  218.     EQUD    160                     ; width in bytes
  219.     EQUD    7
  220.     EQUD    &DAC0                   ; memory size (110K)
  221.     EQUD    11
  222.     EQUD    639                     ; X pixels - 1
  223.     EQUD    12
  224.     EQUD    349                     ; Y pixels - 1
  225.     EQUD    -1
  226.  
  227. .m43vidc_list
  228.     EQUD    0
  229.     EQUD    27                      ; Base MODE
  230.     EQUD    &805F0000
  231.     EQUD    &840B0000
  232.     EQUD    &880E8000
  233.     EQUD    &8C0DC000
  234.     EQUD    &905DC000
  235.     EQUD    &945E8000
  236.     EQUD    &A0704000
  237.     EQUD    &A4004000
  238.     EQUD    &A80D8000
  239.     EQUD    &AC0E0000
  240.     EQUD    &B0658000
  241.     EQUD    &B4660000
  242.     EQUD    &E000000B
  243.     EQUD    -1
  244.  
  245. .m43work_list
  246.     EQUD    0
  247.     EQUD    27                      ; Base MODE
  248.     EQUD    0
  249.     EQUD    0
  250.     EQUD    1
  251.     EQUD    79                      ; No. columns - 1
  252.     EQUD    2
  253.     EQUD    42                      ; No. rows - 1
  254.     EQUD    4
  255.     EQUD    1                       ; X Eigen
  256.     EQUD    5
  257.     EQUD    1                       ; Y Eigen
  258.     EQUD    6
  259.     EQUD    320                     ; width in bytes
  260.     EQUD    7
  261.     EQUD    &1B580                  ; memory size (110K)
  262.     EQUD    11
  263.     EQUD    639                     ; X pixels - 1
  264.     EQUD    12
  265.     EQUD    349                     ; Y pixels - 1
  266.     EQUD    -1
  267.  
  268. .m43vidc_list
  269.     EQUD    0
  270.     EQUD    27                      ; Base MODE
  271.     EQUD    &805F0000
  272.     EQUD    &840B0000
  273.     EQUD    &880E8000
  274.     EQUD    &8C0DC000
  275.     EQUD    &905DC000
  276.     EQUD    &945E8000
  277.     EQUD    &A0704000
  278.     EQUD    &A4004000
  279.     EQUD    &A807C000
  280.     EQUD    &AC084000
  281.     EQUD    &B05FC000
  282.     EQUD    &B4604000
  283.     EQUD    &E000000B
  284.     EQUD    -1
  285.  
  286. .m43work_list
  287.     EQUD    0
  288.     EQUD    27                      ; Base MODE
  289.     EQUD    0
  290.     EQUD    0
  291.     EQUD    1
  292.     EQUD    79                      ; No. columns - 1
  293.     EQUD    2
  294.     EQUD    42                      ; No. rows - 1
  295.     EQUD    4
  296.     EQUD    1                       ; X Eigen
  297.     EQUD    5
  298.     EQUD    1                       ; Y Eigen
  299.     EQUD    6
  300.     EQUD    320                     ; width in bytes
  301.     EQUD    7
  302.     EQUD    &1B580                  ; memory size (110K)
  303.     EQUD    11
  304.     EQUD    639                     ; X pixels - 1
  305.     EQUD    12
  306.     EQUD    349                     ; Y pixels - 1
  307.     EQUD    -1
  308.  
  309. .m44vidc_list
  310.     EQUD    0
  311.     EQUD    25                      ; Base MODE
  312.     EQUD    &805F0000
  313.     EQUD    &840B0000
  314.     EQUD    &880D8000
  315.     EQUD    &8C0B4000
  316.     EQUD    &905B4000
  317.     EQUD    &945D8000
  318.     EQUD    &A0704000
  319.     EQUD    &A4004000
  320.     EQUD    &A81EC000
  321.     EQUD    &AC1F4000
  322.     EQUD    &B0514000
  323.     EQUD    &B451C000
  324.     EQUD    &E0000003
  325.     EQUD    -1
  326.  
  327. .m44work_list
  328.     EQUD    0
  329.     EQUD    25                      ; Base MODE
  330.     EQUD    0
  331.     EQUD    0
  332.     EQUD    1
  333.     EQUD    79                      ; No. columns - 1
  334.     EQUD    2
  335.     EQUD    24                      ; No. rows - 1
  336.     EQUD    4
  337.     EQUD    1                       ; X Eigen
  338.     EQUD    5
  339.     EQUD    2                       ; Y Eigen
  340.     EQUD    6
  341.     EQUD    80                      ; width in bytes
  342.     EQUD    7
  343.     EQUD    &3E80                   ; memory size
  344.     EQUD    11
  345.     EQUD    639                     ; X pixels - 1
  346.     EQUD    12
  347.     EQUD    199                     ; Y pixels - 1
  348.     EQUD    -1
  349.  
  350. .m45vidc_list
  351.     EQUD    0
  352.     EQUD    26                      ; Base MODE
  353.     EQUD    &805F0000
  354.     EQUD    &840B0000
  355.     EQUD    &880D8000
  356.     EQUD    &8C0C4000
  357.     EQUD    &905C4000
  358.     EQUD    &945D8000
  359.     EQUD    &A0704000
  360.     EQUD    &A4004000
  361.     EQUD    &A81EC000
  362.     EQUD    &AC1F4000
  363.     EQUD    &B0514000
  364.     EQUD    &B451C000
  365.     EQUD    &E0000006
  366.     EQUD    -1
  367.  
  368. .m45work_list
  369.     EQUD    0
  370.     EQUD    26                      ; Base MODE
  371.     EQUD    0
  372.     EQUD    0
  373.     EQUD    1
  374.     EQUD    79                      ; No. columns - 1
  375.     EQUD    2
  376.     EQUD    24                      ; No. rows - 1
  377.     EQUD    4
  378.     EQUD    1                       ; X Eigen
  379.     EQUD    5
  380.     EQUD    2                       ; Y Eigen
  381.     EQUD    6
  382.     EQUD    160                     ; width in bytes
  383.     EQUD    7
  384.     EQUD    &7D00                   ; memory size
  385.     EQUD    11
  386.     EQUD    639                     ; X pixels - 1
  387.     EQUD    12
  388.     EQUD    199                     ; Y pixels - 1
  389.     EQUD    -1
  390.  
  391. .m46vidc_list
  392.     EQUD    0
  393.     EQUD    27                      ; Base MODE
  394.     EQUD    &805F0000
  395.     EQUD    &840B0000
  396.     EQUD    &880D8000
  397.     EQUD    &8C0CC000
  398.     EQUD    &905CC000
  399.     EQUD    &945D8000
  400.     EQUD    &A0704000
  401.     EQUD    &A4004000
  402.     EQUD    &A81EC000
  403.     EQUD    &AC1F4000
  404.     EQUD    &B0514000
  405.     EQUD    &B451C000
  406.     EQUD    &E000000B
  407.     EQUD    -1
  408.  
  409. .m46work_list
  410.     EQUD    0
  411.     EQUD    27                      ; Base MODE
  412.     EQUD    0
  413.     EQUD    0
  414.     EQUD    1
  415.     EQUD    79                      ; No. columns - 1
  416.     EQUD    2
  417.     EQUD    24                      ; No. rows - 1
  418.     EQUD    4
  419.     EQUD    1                       ; X Eigen
  420.     EQUD    5
  421.     EQUD    2                       ; Y Eigen
  422.     EQUD    6
  423.     EQUD    320                     ; width in bytes
  424.     EQUD    7
  425.     EQUD    &FA00                   ; memory size
  426.     EQUD    11
  427.     EQUD    639                     ; X pixels - 1
  428.     EQUD    12
  429.     EQUD    199                     ; Y pixels - 1
  430.     EQUD    -1
  431.  
  432.   ]
  433. NEXT pass
  434. ENDPROC
  435.